#include "NVIC.h"
  #include "User_USART.h"  
#include "stm32f10x.h"
#include "Delay.h"
void GPIO_Weigh_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
}

uint32_t Read_Weigh(void)
{
	
	//User_UART_Send_String(USART1, "\nok");
	uint8_t i;
	uint32_t value = 0;
	
	/**
	??????,??????? DOUT ?????,??A/D ????????????,?????
	????? PD_SCK ?????,???????????
	**/
	GPIO_SetBits(GPIOB, GPIO_Pin_13); //????DT??????
	delay_us(1);
	GPIO_ResetBits(GPIOB, GPIO_Pin_14); //????SCK??????
	delay_us(1);
	
	/**
	??DT???????
	**/
	while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13))
	delay_us(1);
	
	/**
	? DOUT ?????????,PD_SCK ??? 25 ? 27 ????????
	25????? ---> ??A ??128
	26????? ---> ??B ??32
	27????? ---> ??A ??64
	**/
	for(i=0; i<24; i++) //24???????????????????
	{
		
		

		//???:
		GPIO_SetBits(GPIOB, GPIO_Pin_14);
		value = value << 1;
		delay_us(1);
		GPIO_ResetBits(GPIOB, GPIO_Pin_14);
		delay_us(1);
		if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13)==1)
		{
			value ++;

		}
		delay_us(1);
	}
	
	//? 25? 27 ???????????? A/D ??????????
	GPIO_SetBits(GPIOB, GPIO_Pin_14); 
	value = value^0x800000; 
	delay_us(1); 
	GPIO_ResetBits(GPIOB, GPIO_Pin_14); 
	delay_us(1);  
	return value; 	
}


void Delay_mss(volatile unsigned int t)	
{
	unsigned int i,n;
	for(n=0;n<t;n++)
		for(i=0;i<800;i++);
}


int main(void)
{
  GPIO_Weigh_Init();
	User_USART_GPIO_Config();
	User_NVIC_Config();
	User_USART_Config();

	User_UART_Send_String(USART1, "abcdefg!\n");

	while(1)
	{
		char str[11]; /* 11 bytes: 10 for the digits, 1 for the null character */
     uint32_t n = Read_Weigh();
		//uint32_t x =537;
     snprintf(str, sizeof str, "%lu", (unsigned long)n); /* Method 1 */
     User_UART_Send_String(USART1, str);
		User_UART_Send_String(USART1, "\n");

		
     Delay_mss(5000);
	}








}
